From 7b63ba3ad607eebb23b1b528c256edb2b48c42fc Mon Sep 17 00:00:00 2001 From: Jonathan Dieter Date: Wed, 7 Mar 2018 13:30:49 +0200 Subject: [PATCH] Finish refactoring zckIndex and zckIndexInfo Signed-off-by: Jonathan Dieter --- src/lib/dl/range.c | 8 +++++--- src/lib/index/index_common.c | 4 +++- src/lib/index/index_create.c | 15 +++++---------- src/lib/index/index_read.c | 2 +- src/zck_delta_size.c | 12 +++++++++--- src/zck_read_header.c | 6 +++++- 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/lib/dl/range.c b/src/lib/dl/range.c index 2c29d6b..af495f9 100644 --- a/src/lib/dl/range.c +++ b/src/lib/dl/range.c @@ -136,11 +136,13 @@ int zck_range_calc_segments(zckRangeInfo *info, unsigned int max_ranges) { } int zck_range_get_need_dl(zckRangeInfo *info, zckCtx *zck_src, zckCtx *zck_tgt) { - zckIndex *tgt_idx = zck_get_index(zck_tgt); - zckIndex *src_idx = zck_get_index(zck_src); + zckIndexInfo *tgt_info = zck_get_index(zck_tgt); + zckIndexInfo *src_info = zck_get_index(zck_src); + zckIndex *tgt_idx = tgt_info->first; + zckIndex *src_idx = src_info->first; while(tgt_idx) { int found = False; - src_idx = zck_get_index(zck_src); + src_idx = src_info->first; while(src_idx) { if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) { diff --git a/src/lib/index/index_common.c b/src/lib/index/index_common.c index 9012228..19f6fa4 100644 --- a/src/lib/index/index_common.c +++ b/src/lib/index/index_common.c @@ -42,8 +42,10 @@ int zck_index_free(zckCtx *zck) { free(tmp); tmp = next; } - memset(&(zck->index), 0, sizeof(zckIndexInfo)); } + if(zck->index.hash_type) + free(zck->index.hash_type); + memset(&(zck->index), 0, sizeof(zckIndexInfo)); if(zck->full_hash_digest) { free(zck->full_hash_digest); zck->full_hash_digest = NULL; diff --git a/src/lib/index/index_create.c b/src/lib/index/index_create.c index 3f8744e..f691091 100644 --- a/src/lib/index/index_create.c +++ b/src/lib/index/index_create.c @@ -162,10 +162,10 @@ int zck_index_add_dl_chunk(zckDL *dl, char *digest, size_t size) { return False; } dl->index.count = dl->index.count + 1; + return True; } int zck_index_add_chunk(zckCtx *zck, char *data, size_t size) { - zckIndex *new_index; zckHash hash; if(zck == NULL) { @@ -177,18 +177,13 @@ int zck_index_add_chunk(zckCtx *zck, char *data, size_t size) { if(!zck_index_new_chunk(&(zck->index), NULL, size)) return False; } else { - if(!zck_hash_update(&(zck->full_hash), data, size)) { - free(new_index); + if(!zck_hash_update(&(zck->full_hash), data, size)) return False; - } - if(!zck_hash_init(&hash, zck->index.hash_type)) { - free(new_index); + if(!zck_hash_init(&hash, zck->index.hash_type)) return False; - } - if(!zck_hash_update(&hash, data, size)) { - free(new_index); + if(!zck_hash_update(&hash, data, size)) return False; - } + char *digest = zck_hash_finalize(&hash); if(digest == NULL) { zck_log(ZCK_LOG_ERROR, diff --git a/src/lib/index/index_read.c b/src/lib/index/index_read.c index ef2ea42..bb15786 100644 --- a/src/lib/index/index_read.c +++ b/src/lib/index/index_read.c @@ -91,7 +91,7 @@ int zck_index_read(zckCtx *zck, char *data, size_t size) { return False; } memcpy(&hash_type, dst, 1); - if(!zck_hash_setup(zck->index.hash_type, hash_type)) { + if(!zck_set_chunk_hash_type(zck, hash_type)) { if(dst) free(dst); return False; diff --git a/src/zck_delta_size.c b/src/zck_delta_size.c index 8991a74..efd6228 100644 --- a/src/zck_delta_size.c +++ b/src/zck_delta_size.c @@ -75,8 +75,14 @@ int main (int argc, char *argv[]) { printf(" %s: %s\n", argv[2], zck_hash_name_from_type(zck_get_chunk_hash_type(zck_src))); return 1; } - zckIndex *tgt_idx = zck_get_index(zck_tgt); - zckIndex *src_idx = zck_get_index(zck_src); + zckIndexInfo *tgt_info = zck_get_index(zck_tgt); + if(tgt_info == NULL) + exit(1); + zckIndexInfo *src_info = zck_get_index(zck_src); + if(src_info == NULL) + exit(1); + zckIndex *tgt_idx = tgt_info->first; + zckIndex *src_idx = src_info->first; if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) != 0) printf("WARNING: Dicts don't match\n"); int dl_size = 0; @@ -84,7 +90,7 @@ int main (int argc, char *argv[]) { int matched_chunks = 0; while(tgt_idx) { int found = False; - src_idx = zck_get_index(zck_src); + src_idx = src_info->first; while(src_idx) { if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) { diff --git a/src/zck_read_header.c b/src/zck_read_header.c index 920f30f..93e418e 100644 --- a/src/zck_read_header.c +++ b/src/zck_read_header.c @@ -54,7 +54,7 @@ int main (int argc, char *argv[]) { exit(1); } close(src_fd); - zckIndex *idx = zck_get_index(zck); + printf("Overall checksum type: %s\n", zck_hash_name_from_type(zck_get_full_hash_type(zck))); printf("Index checksum: "); char *digest = zck_get_index_digest(zck); @@ -68,6 +68,10 @@ int main (int argc, char *argv[]) { printf("\n"); printf("Index count: %lu\n", zck_get_index_count(zck)); printf("Chunk checksum type: %s\n", zck_hash_name_from_type(zck_get_chunk_hash_type(zck))); + zckIndexInfo *idxi = zck_get_index(zck); + if(idxi == NULL) + exit(1); + zckIndex *idx = idxi->first; while(idx) { for(int i=0; idigest[i]); -- 2.30.2